package com.yxinsur.imc.business.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yxinsur.imc.business.domain.ImcRecnDetails;
import com.yxinsur.imc.business.vo.RecnDetailsVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 系统生成手续费明细 Mapper接口
 *
 * @author imc
 * @date 2021-05-14
 */
@Mapper
public interface ImcRecnDetailsMapper extends BaseMapper<ImcRecnDetails> {
    /**
     * 写入L表
     *
     * @param imcRecnDetails L表
     * @return 结果
     */
    long insertImcRecnDetails(ImcRecnDetails imcRecnDetails);

    /**
     * 批量写入L表
     *
     * @param imcRecnDetailsList L表集合
     * @return 结果
     */
    long insertImcRecnDetailsList(@Param("list") List<ImcRecnDetails> imcRecnDetailsList);

    /**
     * 更新L表
     *
     * @param imcRecnDetails L表
     * @return 结果
     */
    int updateImcRecnDetails(ImcRecnDetails imcRecnDetails);

    /**
     * 批量更新L表（批量处理核对结果）
     *
     * @param imcRecnDetailsList L表集合
     * @return 结果
     */
    int updateImcRecnDetailsListOfDispose(@Param("list") List<ImcRecnDetails> imcRecnDetailsList);

    /**
     * 批量逻辑删除L表
     *
     * @param lList L表集合
     * @return 结果
     */
    int updateImcRecnDetailsListOfDelete(@Param("list") List<ImcRecnDetails> lList);

    /**
     * 查询L表
     *
     * @param recnId   主表ID
     * @param tenantId 租户ID
     * @return 结果
     */
    List<RecnDetailsVo> selectImcRecnDetailsVoByRecnId(@Param("recnId") Long recnId, @Param("tenantId") Long tenantId);

    /**
     * 查询L表
     *
     * @param imcRecnDetails ImcRecnDetails
     * @return 结果
     */
    List<ImcRecnDetails> selectImcRecnDetailsList(ImcRecnDetails imcRecnDetails);

    /**
     * 根据{主表ID}查询L表
     *
     * @param recnId   主表ID
     * @param tenantId 租户ID
     * @return 结果
     */
    List<ImcRecnDetails> selectImcRecnDetailsByRecnId(@Param("recnId") Long recnId, @Param("tenantId") Long tenantId);

    /**
     * 根据{主表ID}{S表ID}查询L表
     *
     * @param recnSupplierDetailsId S表ID
     * @param tenantId              租户ID
     * @return 结果
     */
    List<ImcRecnDetails> listRecnDetailsByRecnSupplierDetailsId(@Param("recnSupplierDetailsId") Long recnSupplierDetailsId, @Param("tenantId") Long tenantId);

    /**
     * 批量更新L表核对结果
     *
     * @param recnDetailsVoList 核对结果集合
     * @return 结果
     */
    long updateDetailsListOfCheckResult(@Param("list") List<RecnDetailsVo> recnDetailsVoList);

    /**
     * 根据{主表ID}查询L表对账项
     *
     * @param recnId   主表id
     * @param tenantId 租户id
     * @return 结果
     */
    List<RecnDetailsVo> listRecnDetailsCheckItemVoByRecnId(@Param("recnId") Long recnId, @Param("tenantId") Long tenantId);

    /**
     * 根据{协议费用科目ID}查询协议是否被手续费对账单使用
     *
     * @param contractExpenseId 协议费用科目ID
     * @param tenantId          租户ID
     * @return 结果
     */
    long countOfRecnByContractExpenseId(@Param("contractExpenseId") Long contractExpenseId, @Param("tenantId") Long tenantId);
}
